1
เลือกแถวที่ต้องการเก็บไว้
DSAI2202Lab 7: Reasoning Across Relationships

ระบบทะเบียนของ UniLearn และ LMS ไม่มีรหัสนักศึกษาเดียวกันทั้งหมด ทีมงานต้องการรายงานหลายฉบับ ซึ่งแต่ละฉบับมีคำตอบที่แตกต่างกันสำหรับคำถามที่ว่า “แถวจากแหล่งข้อมูลใดที่ต้องปรากฏในผลลัพธ์?”

ใช้ฐานข้อมูลจาก Lab 6 ซ้ำ

หากคุณรัน lab6_7_setup.sql ใน Lab 6 ไปแล้ว ให้ใช้ข้อมูลนั้นต่อไป หากยังไม่ได้รัน ให้เปิดไฟล์ตั้งค่าที่ใช้ร่วมกันซึ่งผู้สอนมอบให้ใน pgAdmin แล้วรันเพียงครั้งเดียว จากนั้นเลือก lab6_7 ในทุกการเชื่อมต่อ Query Tool ใหม่

เริ่มจาก Join ที่คุณคุ้นเคย

  1. ตรวจดูตาราง students และ lms_roster: มี 22 รหัสในระบบทะเบียน และ 6 รหัสใน LMS
  2. รัน INNER JOIN ตามกฎการจับคู่จาก Lab 6
  3. ระบุรหัสทั้ง 4 รายการที่มีอยู่ในทั้งสองแหล่งข้อมูล
  4. อธิบายว่าเหตุใดผลลัพธ์นี้จึงไม่สามารถเป็นรายการที่ครบถ้วนจากแหล่งข้อมูลใดแหล่งหนึ่งได้

คำขอรายงาน 5 รายการ

แสดงบัญชีที่ใช้ร่วมกัน เก็บนักศึกษาทุกคนในระบบทะเบียน เก็บบัญชี LMS ทุกรายการ กระทบยอดทั้งสองแหล่งข้อมูล และสร้างตัวเลือกนักศึกษา–รายวิชา คุณจะเขียนคิวรี INNER, LEFT, RIGHT, FULL และ CROSS JOIN สำหรับคำขอเหล่านี้

✍️ คาดเดาบริบทที่ขาดหายไป
S103 ลงทะเบียนแล้วแต่ไม่มีบัญชี LMS ส่วน S901 ถูกนำเข้าใน LMS แต่ไม่มีในระบบทะเบียน ทั้งสองรายการนี้ควรอยู่ในส่วนใดของรายงานที่สมบูรณ์?
บัญชีที่ใช้ร่วมกัน
SET search_path TO lab6_7;

SELECT s.student_id AS registry_id, s.student_name,
       r.student_id AS lms_id, r.lms_name
FROM students AS s
INNER JOIN lms_roster AS r
  ON s.student_id = r.student_id
ORDER BY s.student_id;
ตรวจสอบรหัสที่จับคู่ได้

มี 4 แถว ได้แก่ S101, S102, S105 และ S121 โดยแต่ละรหัสไม่ซ้ำกันในทั้งสองตาราง จึงทำให้คู่ที่จับคู่ได้แต่ละคู่ปรากฏเพียงครั้งเดียว รายงานนี้แสดงเฉพาะบัญชีที่ใช้ร่วมกัน

Uma (S121) มีบัญชี LMS แม้จะไม่ได้ลงทะเบียนเรียนรายวิชาใดเลย การที่บัญชีจับคู่กันได้ไม่ได้ยืนยันว่ามีการเข้าร่วมรายวิชา